﻿#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QtDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    qDebug() << QSqlDatabase::drivers(); //打印Qt支持的数据库驱动

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//添加MySql数据库

    //连接数据库
    db.setHostName("127.0.0.1");//数据库服务器IP
    db.setPort(3306);
    db.setUserName("root");//数据库用户名
    db.setPassword("123456");//密码
    db.setDatabaseName("info");//使用的数据库

    //打开数据库
    if(!db.open())
    {
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }
    else
    {
        qDebug() << "打开了";
    }

    QSqlQuery query(db);//绑定要访问的数据库
    /*********************************************创建数据库表student***********************************************
    * id int 整型、关键字
    * name varchar(255) 字符型
    * age int 整型
    * score int 整型
    **************************************************************************************************************/
    //query.exec(" create table student(id int primary key auto_increment, name varchar(255), age int, score int);");

    query.exec(" insert into student(id, name, age, score) values(1, 'mike', 18, 76);");//插入单条数据

    /*************************************************批量插入数据******************************************************/
    /**********************************************obdc风格批量插入数据***************************************************

    //预处理语句：占位符： +自定义名字
    query.prepare(" insert into student(name, age, score) values(?, ?, ?);");//预处理语句
    QVariantList nameList,ageList, scoreList;//给字段设置内容 list
    nameList << "小米" << "华为" << "三星";
    ageList <<33 <<43 <<55;
    scoreList << 59 << 69 << 100;
    //给字段绑定（可以不按照顺序，有占位符： +自定义名字）
    query.bindValue(":name",nameList);
    query.bindValue(":age",ageList);
    query.bindValue(":score",scoreList);
    //执行预处理命令
    query.execBatch();
    *************************************************obdc风格批量插入数据**************************************************/


    /*********************************************oracle风格批量插入数据**************************************************

    //预处理语句：占位符： +自定义名字
    query.prepare(" insert into student(name, age, score) values(:name, :age, :score);");
    QVariantList nameList,ageList, scoreList;//给字段设置内容 list
    //给字段设置内容 list
    nameList << "张三" << "李四" << "王五";
    ageList <<11 <<45 <<66;
    scoreList << 59 << 69 << 79;
    //给字段绑定相应的值,按顺序绑定；id号自动添加
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);
    //执行预处理命令
    query.execBatch();

    /***********************************************oracle风格批量插入数据*************************************************/

    //查找数据
    //query.exec("select * from student");//从表中遍历每一行
    query.exec("select * from student where name = '华为'");//从表中遍历name为华为的行
    while(query.next())//一行一行遍历
    {
        //取出当前行的内容,取得时候按列来取
        qDebug() << query.value(0).toInt()
                 << query.value(1).toString()
                 << query.value("age").toInt()
                 << query.value("score").toInt();

    }
    //更新数据
    query.exec("update student set score = 100 where name = '华为'");
    /******************************************对数据库中的info数据库进行操作*************************************************/
    /******************************************对数据库中的info数据库进行操作*************************************************/



    /******************************************对数据库中的test数据库进行操作*************************************************/
    /******************************************对数据库中的test数据库进行操作**************************************************
        QSqlDatabase mySqldatab = QSqlDatabase::addDatabase("QMYSQL","b");//添加MySQL数据库
        mySqldatab.setHostName("127.0.0.1");
        mySqldatab.setPort(3306);
        mySqldatab.setUserName("root");
        mySqldatab.setPassword("FZX13752228127");
        mySqldatab.setDatabaseName("test");
        mySqldatab.open();
        if(!mySqldatab.open())
        {
            QMessageBox::warning(this,"错误",mySqldatab.lastError().text());
            return;
        }
        QSqlQuery queryb(mySqldatab);//绑定要访问的数据库("QMYSQL","b")中的b与a区分开了info和test两个数据库
        queryb.exec(" create table teacher(id int primary key auto_increment, name varchar(255), age int, salary float);");

    ******************************************对数据库中的test数据库进行操作**************************************************/
    /******************************************对数据库中的test数据库进行操作*************************************************/

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_buttonDel_clicked()
{
    QString name = ui->lineEdit->text();//获取行编辑内容
    QString delsql = QString("delete from student where name = '%1'").arg(name);//注意里面最后不带；号
    //开启一个事务
    QSqlDatabase::database().transaction();
    QSqlQuery query;//绑定要访问的数据库
    query.exec(delsql);
}

void Widget::on_pubuttonSure_clicked()
{
    //执行删除
    QSqlDatabase::database().commit();
}

void Widget::on_buttonCancel_clicked()
{
    //回撤取消删除
    QSqlDatabase::database().rollback();
}
